#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <sys/types.h>
#include <unistd.h>
#include <iostream>

using namespace std;

int x = 111;

void show(const string &name)
{
    cout << "I am " << name << ", x=" << x << endl;
}

void *threadRun(void *args)
{
    const string name = (char *)args;
    while (true)
    {
        show(name);
        sleep(1);
    }
}

int main()
{
    pthread_t tid[5];
    char name[64];

    for (int i = 0; i < 5; i++)
    {
        snprintf(name, sizeof name, "%s-%d", "thread", i);
        pthread_create(tid+i, nullptr, threadRun, (void *)name);
        //sleep(1);//缓解传参bug
    }

    while (true)
    {
        cout << "I am main thread , getpid :" << getpid() << endl;
        sleep(2);
    }
    return 0;
}

// int g_val = 100;
// int main()
// {
//     //vfork()与fork()的区别？
//     //fork函数创建出来的子进程与其父进程的地址空间不同，vfork函数创建出来的子进程与其父进程共享地址空间

// 	pid_t id = vfork();
// 	if (id == 0){
// 		//child
// 		g_val = 200;
// 		printf("child:PID:%d, PPID:%d, g_val:%d\n", getpid(), getppid(), g_val);
// 		exit(0);
// 	}
// 	//father
// 	sleep(3);
// 	printf("father:PID:%d, PPID:%d, g_val:%d\n", getpid(), getppid(), g_val);
// 	return 0;
// }
